/****************************************************************************\
 * @file     BR_Stat.h
 * @author   傅帅
 * @date     2019/12/25
 * @brief    杂毛
 *
 ******************************************************************************
 * @attent
 ****************************************************************************/
#ifndef BR_MISC_H
#define BR_MISC_H

#include "stdio.h"
#include "stdint.h"
#include "stm32f4xx_conf.h"
#include "stm32f4xx.h"

//FLASH起始地址
#define STM32_FLASH_BASE 0x08000000     //STM32 FLASH的起始地址

//FLASH 扇区的起始地址
#define ADDR_FLASH_SECTOR_0     ((u32)0x08000000 )       //扇区0起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_1     ((u32)0x08004000 )       //扇区1起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_2     ((u32)0x08008000 )       //扇区2起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_3     ((u32)0x0800C000 )       //扇区3起始地址, 16 Kbytes
#define ADDR_FLASH_SECTOR_4     ((u32)0x08010000 )       //扇区4起始地址, 64 Kbytes
#define ADDR_FLASH_SECTOR_5     ((u32)0x08020000 )       //扇区5起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_6     ((u32)0x08040000 )       //扇区6起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_7     ((u32)0x08060000 )       //扇区7起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_8     ((u32)0x08080000 )       //扇区8起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_9     ((u32)0x080A0000 )       //扇区9起始地址, 128 Kbytes
#define ADDR_FLASH_SECTOR_10    ((u32)0x080C0000 )       //扇区10起始地址,128 Kbytes
#define ADDR_FLASH_SECTOR_11    ((u32)0x080E0000 )       //扇区11起始地址,128 Kbytes

void STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite);         //从指定地址开始写入指定长度的数据
void STMFLASH_Read(u32 ReadAddr,u32 *pBuffer,u32 NumToRead);            //从指定地址开始读出指定长度的数据
void delay_ms(u16 nms);
void delay_us(u32 nus);

void BR_vSysTickInit(uint8_t Sysclk);
void BR_vTimerCreate(void);
void BR_vTemplateInit(void);
void BR_vTemplateTaskInit(void);
void BR_vTemplateTaskCreate(void);
void BR_vMechanismTaskCreate(void);
uint8_t BR_cMemCat(uint8_t *pTargetAddr, uint8_t Size, const char *Format, ...);
void BR_vCheckByteCalculateAppend(uint8_t *pStr, uint8_t Len);
void BR_vCRCCheckByteCalculateAppend(uint8_t *pStr, uint8_t Len);

#endif
